/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package buscador;

import java.util.ArrayList;

/**
 *
 * @author marco
 */
public class TokensString {

    String palabraIncompleta = null;   // para guardar palabras incompletas al final de linea

    public ArrayList<String> getTokens(String caracteres) {
        ArrayList<String> tokens = new ArrayList<>();
        int inicioToken = 0, finToken = 0;
        int longitudEntrada = caracteres.length();
        char leido;
        String tokenAnadir;

        if (palabraIncompleta != null) {
            caracteres = palabraIncompleta.concat(caracteres);
            palabraIncompleta = null;
            
        }
        while (finToken < longitudEntrada) {
            leido = caracteres.charAt(inicioToken);
            finToken++;
            while ((finToken < longitudEntrada) && ((leido == ' ') || (leido == '\t') || (leido == '\n') || (leido == '\r'))) {
                inicioToken++;
                finToken++;
                leido = caracteres.charAt(inicioToken);
            }
            if (leido == '/') {
                do {
                    leido = caracteres.charAt(finToken);
                    finToken++;
                } while (finToken < longitudEntrada && ((leido != '/') && (leido != '\t') && (leido != '\n') && (leido != '\r')));
                if (leido == '/') {
                    finToken++;
                }
            } else {
                while (finToken < longitudEntrada && ((leido != ' ') && (leido != '\t') && (leido != '\n') && (leido != '\r'))) {
                    leido = caracteres.charAt(finToken);
                    finToken++;
                }
            }
            if (finToken > inicioToken) {
                if ((finToken < longitudEntrada)) {
                    tokenAnadir = quitarAcentos(caracteres.substring(inicioToken, finToken - 1)).toLowerCase();
                    
                    tokens.add(tokenAnadir);
                    inicioToken = finToken;
                } else {  //Es la ultima palabra de la cadena analizada
                    tokenAnadir = caracteres.substring(inicioToken, longitudEntrada);
                    if (!tokenAnadir.endsWith("-")) {
                        tokenAnadir = quitarAcentos(tokenAnadir).toLowerCase();
                        
                        tokens.add(tokenAnadir);

                    } else // es una palabra inacabada, acaba en - y hay que unirla a la siguiente linea
                    {
                        palabraIncompleta = tokenAnadir.substring(0, tokenAnadir.length() - 1);

                    }
                }
            }
        }
        return tokens;
    }
    /*
     * public ArrayList<String> getTokens(String caracteres) { ArrayList<String>
     * tokens = new ArrayList<>(); int inicioToken = 0, finToken = 0; int
     * longitudEntrada = caracteres.length(); char leido; String tokenAnadir =
     * null;
     *
     *
     * while (finToken < longitudEntrada) { leido =
     * caracteres.charAt(inicioToken); finToken++; while ((finToken <
     * longitudEntrada) && ((leido == ' ') || (leido == '\t') || (leido == '\n')
     * || (leido == '\r'))) { inicioToken++; finToken++; leido =
     * caracteres.charAt(inicioToken); } if (leido == '/') { do { leido =
     * caracteres.charAt(finToken); finToken++; } while (finToken <
     * longitudEntrada && ((leido != '/') && (leido != '\t') && (leido != '\n')
     * && (leido != '\r'))); if (leido == '/') { finToken++; } } else { while
     * (finToken < longitudEntrada && ((leido != ' ') && (leido != '\t') &&
     * (leido != '\n') && (leido != '\r'))) { leido =
     * caracteres.charAt(finToken); finToken++; } } if (finToken > inicioToken)
     * { if ((finToken < longitudEntrada)) { tokenAnadir =
     * quitarAcentos(caracteres.substring(inicioToken, finToken -
     * 1)).toLowerCase(); if (palabraIncompleta != null) { tokenAnadir =
     * palabraIncompleta.concat(tokenAnadir); palabraIncompleta = null;
     * Log.registrarTexto("/home/marco/Escritorio/BuscadorWEB", tokenAnadir); }
     * tokens.add(tokenAnadir); inicioToken = finToken; } else { //Es la ultima
     * palabra de la cadena analizada tokenAnadir =
     * caracteres.substring(inicioToken, longitudEntrada); if
     * (!tokenAnadir.endsWith("-")) { tokenAnadir =
     * quitarAcentos(tokenAnadir).toLowerCase(); tokens.add(tokenAnadir);
     *
     * } else // es una palabra inacabada, acaba en - y hay que unirla a la
     * siguiente linea { palabraIncompleta = tokenAnadir.substring(0,
     * tokenAnadir.length() - 1);
     *
     * }
     *
     * }
     * }
     * }
     * return tokens; }
     */

    public static String quitarAcentos(String input) {
        // Cadena de caracteres original a sustituir.
        String original = "áàäéèëíìïóòöúùuñÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑçÇ";
        // Cadena de caracteres ASCII que reemplazaran los originales.
        String ascii = "aaaeeeiiiooouuunAAAEEEIIIOOOUUUNcC";
        String output = input;
        for (int i = 0; i < original.length(); i++) {
            // Reemplazamos los caracteres especiales.
            output = input.replace(original.charAt(i), ascii.charAt(i));
        }
        return output;
    }
}
